2016-11-13 109 views
0

我正在开发一个关于JAVA Swing的项目。我没有太多的JAVA经验,我需要你们的帮助。
我使用的是frame.pack(),因此它根据需要采用最佳尺寸。我的screenTwo可以根据来自ScreenOne的输入而改变。我用frame.setMaximumSize(new Dimension(1300, 500)),但它似乎并没有工作。
如果框架变大,它与任务栏重叠,我不希望这样,所以它应该比总屏幕尺寸稍小。如何实现这一目标?
编辑:
代码:JAVA设置JFrame的最大尺寸

public class Test { 

    private static JFrame frame ; 
    private JRadioButton[] radioButton; 
    public static void main(String[] args) { 
     Test t = new Test(); 
     t.go(); 
     frame.pack(); 
     frame.setMaximumSize(new Dimension(1300, 600)); 
     frame.setResizable(false); 
     frame.setVisible(true); 
     Dimension si = frame.getContentPane().getSize(); 
     System.out.println(si);   //Output: java.awt.Dimension[width=934,height=751] 
    } 
    public void go() 
    { 
     frame = new JFrame(); 
     JPanel panel1 = new JPanel(); 
     frame.getContentPane().add(panel1); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     panel1.setLayout(new BorderLayout(0, 20)); 
     Font font = new Font("Times New Roman", Font.PLAIN, 20); 

     JPanel panel2 = new JPanel(); 
     panel2.setLayout(new FlowLayout(FlowLayout.CENTER, 50, 1)); 
     panel2.add(new JLabel("       Flight ID")); 
     panel2.add(new JLabel("        Departure")); 
     panel2.add(new JLabel("    Arrival  ")); 
     panel2.add(new JLabel("  Transit Time ")); 
     panel2.add(new JLabel("Total Duration      "));   
     panel1.add(BorderLayout.NORTH, panel2); 

     JPanel panel3 = new JPanel(); 
     panel3.setLayout(new GridLayout(0, 1));   

     GridBagConstraints c = new GridBagConstraints(); 
     int comboSize = 15, i; 
     JPanel panelCombo[] = new JPanel[comboSize]; 
     ButtonGroup group = new ButtonGroup(); 
     radioButton = new JRadioButton[comboSize]; 
     /*** 
     Adding a bunch of components in here 
     ***/ 
     for(i=0; i<comboSize; i++) { 
       panelCombo[i] = new JPanel(); 
       panelCombo[i].setLayout(new GridBagLayout()); 
       c.gridx = 0;    
       c.gridy = 0; 
       c.insets = new Insets(0, 50, 0, 50);    
       panelCombo[i].add(new JLabel("Flight 1 ID"), c); 

       c.gridx++; 
       panelCombo[i].add(new JLabel("Dept Time"), c); 

       c.gridx++; 
       panelCombo[i].add(new JLabel("Arr Time"), c); 
       c.gridx++; 
       c.gridheight = 4; 
       panelCombo[i].add(new JLabel("Total time"), c); 
       c.gridx++; 

       panelCombo[i].add(new JLabel("Duration"), c); 

       c.gridx++;   
       radioButton[i] = new JRadioButton(); 
       panelCombo[i].add(radioButton[i], c); 
       group.add(radioButton[i]); 

       c.gridheight = 1; 
       c.gridx = 0; 
       c.gridy++; 
       panelCombo[i].add(new JLabel("Depar to Arrival"), c); 

       c.gridx++; 
       panelCombo[i].add(new JLabel("Date"), c); 

       c.gridx = 0; 
       c.gridy++; 
       panelCombo[i].add(new JLabel("Flight 2 ID"), c); 

       c.gridx++; 
       panelCombo[i].add(new JLabel("Dept Time"), c); 

       c.gridx++; 
       panelCombo[i].add(new JLabel("Arr Time"), c); 

       c.gridx = 0; 
       c.gridy++; 
       panelCombo[i].add(new JLabel("Dept to Arrival"), c); 

       c.gridx++; 
       panelCombo[i].add(new JLabel("Date"), c); 
       panelCombo[i].setBackground(Color.GREEN); 

       panel3.add(panelCombo[i]); 
       panelCombo[i].setBorder(BorderFactory.createLineBorder(Color.BLACK)); 
     }    
     JScrollPane scroll = new JScrollPane(panel3); 
     scroll.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED); 
     scroll.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER); 
     panel1.add(BorderLayout.CENTER, scroll); 


    } 
} 
+0

[setMaximumSize not working in java]的可能重复(http://stackoverflow.com/questions/4061010/setmaximumsize-not-working-in-java) –

+0

请显示您当前正在尝试的代码,否则,很难帮助 – ItamarG3

+0

@ItamarGreen代码已添加。期待任何帮助。 – Arindam

回答

4

首先,什么所有你发布的代码是?你的问题是关于帧的首选和最大尺寸。框架的布局与问题无关。

我们对您的申请不感兴趣。我们只对展示问题的代码感兴趣。

例如:

JPanel panel = new JPanel(); 
panel.setPreferredSize(new Dimension(1400, 600)); 

JFrame frame = new JFrame(); 
frame.add(panel); 
frame.pack(); 
frame.setMaximumSize(new Dimension(1300, 500)); 
frame.setVisible(true); 

现在你把上面的代码在main()方法,你必须演示你的问题的代码。这是你在论坛发布的内容,而不是你应用程序的核心转储。

如果帧变大,其与任务栏重叠,我不希望出现这种情况,

关于你的问题,你可以使用下面的代码,以获得桌面上的可用空间:

GraphicsEnvironment env = GraphicsEnvironment.getLocalGraphicsEnvironment(); 
Rectangle bounds = env.getMaximumWindowBounds(); 
System.out.println("Screen Bounds: " + bounds); 

添加上面的代码包后(),然后添加类似以下内容:

int width = Math.min(frame.getWidth(), bounds.width); 
int height = Math.min(frame.getHeight(), bounds.height); 
frame.setSize(new Dimension(width, height)); 
frame.setVisible(true); 
+0

我可能会提到*一般来说,使用包比调用setSize更好,因为包离开帧布局管理器负责帧大小*(http://stackoverflow.com/questions/22982295/what-does-pack-做)。但这在**这种情况下并不相关 – ItamarG3