2016-11-11 17 views
2

学校プロジェクトでは、Javaでグレードブックを作成しました。 guiを作成するときには、setBounds()メソッドでハードコードされた値を使用しました。今これは私が1024×768の画面解像度を持っていれば正常に見えましたが、私は新しいラップトップを手に入れたときに4kの画面を持っていました。異なるスクリーン解像度にさらされたときにJFrameのサイズが動的に変更される

私の質問は、Jframeとそれが画面の解像度と一致するようにフレーム上の関連するオブジェクトのサイズを動的に変更する方法でしょうか?

私はあなたがこの

Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize(); 

double width = screenSize.getWidth(); 

double height = screenSize.getHeight(); 

から画面の解像度を得ることができることを知っているが、私はこれを行うための最善の方法だろうかわかりません。

+0

はちょうどあなたが右の感じ、JFrameのサイズを設定するウィンドウ/画面比率を挿入します。 PS:実行時にウィンドウサイズを設定する場合(塗りつぶした後)には、revalidate()とrepaint()をSwingスレッドで呼び出す必要があります。 –

+0

setBounds()の使用をやめてください。レイアウトマネージャを使用します。すべてのスイングチュートリアルで説明され推奨されています。 https://docs.oracle.com/javase/tutorial/uiswing/layout/index.html –

+0

レイアウト・マンガの使用方法を学びます。サイズを設定する方法はありません。 – khakishoiab

答えて

0

レイアウトマネージャは、*のLayoutManager インタフェースを実装するオブジェクトであり、容器内の成分 のサイズと位置を決定します。コンポネントはサイズとアライメントを提供することができますが、コンテナのレイアウトマネージャは、コンテナ内のコンポーネントのサイズと の位置について最終的に言います。

私はあなたがhereは、いくつかのidea.THe原作者のBorderLayoutなどのレイアウトマネージャを設定し、あなたのパネルが行くべき場所を、より具体的に定義されますレイアウトmanagers.Hopeを使用した例を参照してください:

MainPanel mainPanel = new MainPanel(); 
JFrame mainFrame = new JFrame(); 
mainFrame.setLayout(new BorderLayout()); 
mainFrame.add(mainPanel, BorderLayout.CENTER); 
mainFrame.pack(); 
mainFrame.setVisible(true); 
のように

は、フレームの中央領域にパネルを置き、完全な使用のための例の下frame.Seeのサイズを変更するとき、それは自動的に拡張することができます:

import java.awt.BorderLayout; 
import java.awt.FlowLayout; 
import java.awt.GridBagLayout; 
import java.awt.GridLayout; 
import javax.swing.BorderFactory; 
import javax.swing.Box; 
import javax.swing.JButton; 
import javax.swing.JFrame; 
import javax.swing.JPanel; 
import javax.swing.SwingUtilities; 

public class TestLayoutManagers { 

    private JPanel northFlowLayoutPanel; 
    private JPanel southBorderLayoutPanel; 
    private JPanel centerGridBagLayoutPanel; 
    private JPanel westBoxLayoutPanel; 
    private JPanel eastGridLayoutPanel; 

    private final JButton northButton = new JButton("North Button"); 
    private final JButton southButton = new JButton("South Button"); 
    private final JButton centerButton = new JButton("Center Button"); 
    private final JButton eastButton = new JButton("East Button"); 
    private final JButton westButton = new JButton("West Button"); 

    public TestLayoutManagers() { 
     northFlowLayoutPanel = new JPanel(new FlowLayout(FlowLayout.CENTER)); 
     southBorderLayoutPanel = new JPanel(new BorderLayout()); 
     centerGridBagLayoutPanel = new JPanel(new GridBagLayout()); 
     eastGridLayoutPanel = new JPanel(new GridLayout(1, 1)); 
     Box box = Box.createHorizontalBox(); 
     westBoxLayoutPanel = new JPanel(); 

     northFlowLayoutPanel.add(northButton); 
     northFlowLayoutPanel.setBorder(BorderFactory.createTitledBorder("Flow Layout")); 

     southBorderLayoutPanel.add(southButton); 
     southBorderLayoutPanel.setBorder(BorderFactory.createTitledBorder("Border Layout")); 

     centerGridBagLayoutPanel.add(centerButton); 
     centerGridBagLayoutPanel.setBorder(BorderFactory.createTitledBorder("GridBag Layout")); 

     eastGridLayoutPanel.add(eastButton); 
     eastGridLayoutPanel.setBorder(BorderFactory.createTitledBorder("Grid Layout")); 

     box.add(westButton); 
     westBoxLayoutPanel.add(box); 
     westBoxLayoutPanel.setBorder(BorderFactory.createTitledBorder("Box Layout")); 

     JFrame frame = new JFrame("Test Layout Managers"); 
     frame.setLayout(new BorderLayout());  // This is the deafault layout 
     frame.add(northFlowLayoutPanel, BorderLayout.PAGE_START); 
     frame.add(southBorderLayoutPanel, BorderLayout.PAGE_END); 
     frame.add(centerGridBagLayoutPanel, BorderLayout.CENTER); 
     frame.add(eastGridLayoutPanel, BorderLayout.LINE_END); 
     frame.add(westBoxLayoutPanel, BorderLayout.LINE_START); 

     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame.pack(); 
     frame.setLocationRelativeTo(null); 
     frame.setVisible(true); 
     frame.setExtendedState(JFrame.MAXIMIZED_BOTH); 

} 

    public static void main(String[] args) { 
     SwingUtilities.invokeLater(new Runnable() { 
      @Override 
      public void run() { 
       TestLayoutManagers testLayoutManagers 
         = new TestLayoutManagers(); 
      } 
     }); 
    } 
} 
0

あなたのAを取りますあなたは、フレームのサイズを変更するときにだけで/他の場合は追加する必要があるので、

import java.awt.Dimension; 
import java.awt.Rectangle; 
import java.awt.Toolkit; 
import java.awt.event.ComponentAdapter; 
import java.awt.event.ComponentEvent; 

import javax.swing.JFrame; 


public class Q1 extends JFrame { 
    public static void main(String[] args) { 
     Q1 frame = new Q1(); 

     frame.setSize(300, 300); 
     frame.setMinimumSize(new Dimension(300, 300)); 
     frame.setLocationRelativeTo(null); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame.setVisible(true);  
    } 

    public Q1() { 
     this.addComponentListener(new ComponentAdapter() { 
      public void componentResized(ComponentEvent e) { 
       // This is only called when the user releases the mouse button. 
       System.out.println("componentResized"); 
      } 
     }); 
    } 

    @Override 
    public void validate() { 
     resize(); 
     super.validate(); 

    }; 

    private void resize() { 
     Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize(); 

     double width = screenSize.getWidth(); 

     double height = screenSize.getHeight(); 

     System.out.println(width + "," + height); 
    } 
} 

これは、画面のサイズを出力します:たとえば、あなたが手がかりを持って、ここで、ベースとしてthis answerthis tutorialを取るようpproachフレームに大きな

を作るための方法をリサイズOUTPUT

1366.0,768.0 
1366.0,768.0 
componentResized 
1366.0,768.0 
1366.0,768.0 
componentResized 
1366.0,768.0 
1366.0,768.0 
componentResized 
関連する問題