2016-07-01 2 views
-2

나는 새롭게 선다. 어느 날 레이아웃 관리자를 사용할 수도 있지만, Frame에 수직 스크롤 막대를 추가하는 방법에 대해 조언 해주십시오. 나는 비 정설적 인 접근법을 취했다. 그러나 나는 배우고있다. 나는 API를 읽는 데 완전히 어려움을 겪고있다. 다음에 수직 스크롤 막대를 추가하는 방법은 무엇입니까 JFrame? 다음과 같이라디오 버튼의이 패널을 스크롤하는 방법

enter image description here

내 코드는 다음과 같습니다

import javax.swing.JScrollPane; 
import java.awt.event.*; 
import javax.swing.*; 
import javax.swing.JOptionPane; 
import javax.swing.JFrame; 
import javax.swing.JLabel; 
//import java.util.Arrays; 

public class NewGameGUI implements ActionListener 
{ 
    private final JRadioButton[] rb = new JRadioButton[20]; 
    JFrame f3; 
    JButton b; 
    JLabel label1; 
    public NewGameGUI() 
    { 
     label1 = new JLabel("Please choose a team"); 
     f3 = new JFrame("Ballon d'or"); 
     f3.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     rb[0] = new JRadioButton("Arsenal"); 
     rb[1] = new JRadioButton("Aston Villa"); 
     rb[2] = new JRadioButton("Bournemouth"); 
     rb[3] = new JRadioButton("Chelsea"); 
     rb[4] = new JRadioButton("Crystal Palace"); 
     rb[5] = new JRadioButton("Everton"); 
     rb[6] = new JRadioButton("Leicester City"); 
     rb[7] = new JRadioButton("Liverpool"); 
     rb[8] = new JRadioButton("Manchester United"); 
     rb[9] = new JRadioButton("Manchester City"); 
     rb[10] = new JRadioButton("Newcastle United"); 
     rb[11] = new JRadioButton("Norwich City"); 
     rb[12] = new JRadioButton("Southampton"); 
     rb[13] = new JRadioButton("Stoke City"); 
     rb[14] = new JRadioButton("Sunderland"); 
     rb[15] = new JRadioButton("Swansea City"); 
     rb[16] = new JRadioButton("Tottenham Hotspur"); 
     rb[17] = new JRadioButton("Watford"); 
     rb[18] = new JRadioButton("West Brom"); 
     rb[19] = new JRadioButton("West Ham"); 

     label1.setBounds(50,25,200,30); 
     f3.add(label1); 

     rb[0].setBounds(50,75,170,30); 
     rb[1].setBounds(50,100,170,30); 
     rb[2].setBounds(50,125,170,30); 
     rb[3].setBounds(50,150,170,30); 
     rb[4].setBounds(50,175,170,30); 
     rb[5].setBounds(50,200,170,30); 
     rb[6].setBounds(50,225,170,30); 
     rb[7].setBounds(50,250,170,30); 
     rb[8].setBounds(50,275,170,30); 
     rb[9].setBounds(50,300,170,30); 
     rb[10].setBounds(50,325,170,30); 
     rb[11].setBounds(50,350,170,30); 
     rb[12].setBounds(50,375,170,30); 
     rb[13].setBounds(50,400,170,30); 
     rb[14].setBounds(50,425,170,30); 
     rb[15].setBounds(50,450,170,30); 
     rb[16].setBounds(50,475,170,30); 
     rb[17].setBounds(50,500,170,30); 
     rb[18].setBounds(50,525,170,30); 
     rb[19].setBounds(50,550,170,30); 

     // JScrollPane pane = new JScrollPane(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS, JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED); 

     // f3.setContentPane(pane); 

     ButtonGroup bg=new ButtonGroup(); 
     bg.add(rb[0]); 
     bg.add(rb[1]); 
     bg.add(rb[2]); 
     bg.add(rb[3]); 
     bg.add(rb[4]); 
     bg.add(rb[5]); 
     bg.add(rb[6]); 
     bg.add(rb[7]); 
     bg.add(rb[8]); 
     bg.add(rb[9]); 
     bg.add(rb[10]); 
     bg.add(rb[11]); 
     bg.add(rb[12]); 
     bg.add(rb[13]); 
     bg.add(rb[14]); 
     bg.add(rb[15]); 
     bg.add(rb[16]); 
     bg.add(rb[17]); 
     bg.add(rb[18]); 
     bg.add(rb[19]); 

     b = new JButton("OK"); 
     b.setBounds(300,300,180,30); 
     b.addActionListener(this); 
     f3.add(rb[0]); 
     f3.add(rb[1]); 
     f3.add(rb[2]); 
     f3.add(rb[3]); 
     f3.add(rb[4]); 
     f3.add(rb[5]); 
     f3.add(rb[6]); 
     f3.add(rb[7]); 
     f3.add(rb[8]); 
     f3.add(rb[9]); 
     f3.add(rb[10]); 
     f3.add(rb[11]); 
     f3.add(rb[12]); 
     f3.add(rb[13]); 
     f3.add(rb[14]); 
     f3.add(rb[15]); 
     f3.add(rb[16]); 
     f3.add(rb[17]); 
     f3.add(rb[18]); 
     f3.add(rb[19]); 
     f3.add(b); 

     f3.setSize(700,700); 

     f3.setLayout(null); 
     f3.setVisible(true); 
    } 

    public void setFrame(JFrame f3){ 
     this.f3 = f3; 
    } 
    public JFrame getFrame(){ 

    return f3; 
    } 
      public void actionPerformed(ActionEvent e) 
      { 
       if(rb[0].isSelected()) 
       { 
        f3.dispose(); 
        JOptionPane.showMessageDialog(f3,"You chose : " + rb[0].getText()); 
       } 
       if(rb[1].isSelected()) 
       { 
        f3.dispose(); 
        JOptionPane.showMessageDialog(f3,"You chose : " + rb[1].getText()); 
       } 
       if(rb[2].isSelected()) 
       { 
        f3.dispose(); 
        JOptionPane.showMessageDialog(f3,"You chose : " + rb[2].getText()); 
       } 
       if(rb[3].isSelected()) 
       { 
        f3.dispose(); 
        JOptionPane.showMessageDialog(f3,"You chose : " + rb[3].getText()); 
       } 
       if(rb[4].isSelected()) 
       { 
        f3.dispose(); 
        JOptionPane.showMessageDialog(f3,"You chose : " + rb[4].getText()); 
       } 
       if(rb[5].isSelected()) 
       { 
        f3.dispose(); 
        JOptionPane.showMessageDialog(f3,"You chose : " + rb[5].getText()); 
       } 
       if(rb[6].isSelected()) 
       { 
        f3.dispose(); 
        JOptionPane.showMessageDialog(f3,"You chose : " + rb[6].getText()); 
       } 
       if(rb[7].isSelected()) 
       { 
        f3.dispose(); 
        JOptionPane.showMessageDialog(f3,"You chose : " + rb[7].getText()); 
       } 
       if(rb[8].isSelected()) 
       { 
        f3.dispose(); 
        JOptionPane.showMessageDialog(f3,"You chose : " + rb[8].getText()); 
       } 
       if(rb[9].isSelected()) 
       { 
        f3.dispose(); 
        JOptionPane.showMessageDialog(f3,"You chose : " + rb[9].getText()); 
       } 
       if(rb[10].isSelected()) 
       { 
        f3.dispose(); 
        JOptionPane.showMessageDialog(f3,"You chose : " + rb[10].getText()); 
       } 
       if(rb[11].isSelected()) 
       { 
        f3.dispose(); 
        JOptionPane.showMessageDialog(f3,"You chose : " + rb[11].getText()); 
       } 
       if(rb[12].isSelected()) 
       { 
        f3.dispose(); 
        JOptionPane.showMessageDialog(f3,"You chose : " + rb[12].getText()); 
       } 
       if(rb[13].isSelected()) 
       { 
        f3.dispose(); 
        JOptionPane.showMessageDialog(f3,"You chose : " + rb[2].getText()); 
       } 
       if(rb[14].isSelected()) 
       { 
        f3.dispose(); 
        JOptionPane.showMessageDialog(f3,"You chose : " + rb[14].getText()); 
       } 
       if(rb[15].isSelected()) 
       { 
        f3.dispose(); 
        JOptionPane.showMessageDialog(f3,"You chose : " + rb[15].getText()); 
       } 
       if(rb[16].isSelected()) 
       { 
        f3.dispose(); 
        JOptionPane.showMessageDialog(f3,"You chose : " + rb[16].getText()); 
       } 
       if(rb[17].isSelected()) 
       { 
        f3.dispose(); 
        JOptionPane.showMessageDialog(f3,"You chose : " + rb[17].getText()); 
       } 
       if(rb[18].isSelected()) 
       { 
        f3.dispose(); 
        JOptionPane.showMessageDialog(f3,"You chose : " + rb[18].getText()); 
       } 
       if(rb[19].isSelected()) 
       { 
        f3.dispose(); 
        JOptionPane.showMessageDialog(f3,"You chose : " + rb[19].getText()); 
       } 
      } 
} 
+2

가능한 복제 [널 (null) 레이아웃 JFrame의에서 스크롤 막대를 추가하는 방법?] (http://stackoverflow.com/questions/18893369/how-to-add-scrollbar-in-jframe-with-null- 레이아웃) – MasterBlaster

+3

"* 레이아웃 관리자를 언젠가 사용할 수 있습니다 *"오늘 그 날로 만드십시오. 이 사이트와 자습서에는 수많은 예제가 있으며 null 레이아웃보다 어렵지 않습니다. 당신은이 시도보다 더 나은 질문을 할 것입니다. – user1803551

+1

묻는 사람이 이미 올바른 전략 (레이아웃 관리자 사용)을 배제했기 때문에이 질문을 주제와 관련이없는 것으로 종료합니다. –

답변

3
  1. 사용 nested layouts, 앤드류 톰슨 suggested있다. 아래 예에서 mainPanel

    • 한 행 및 팀 패널의 컬럼의 임의의 개수 및 OK 버튼 GridLayout(1, 0)를 이용한다.

    • teamPanelGridLayout(0, 1)을 팀 라디오 버튼에 대해 임의의 행 수와 1 열로 사용합니다. Iterable를 구현

  2. 사용 Listfor-each를 사용하여 코드를 단순화합니다. 아래의 예에서,

    • List<String>names을 보유하고 있습니다.

    • 이라는 이름의 List<JRadioButton>은 각 팀에 대해 JRadioButton을 보유합니다. names 통해

    • 루프

    • JRadioButton 인스턴스를 생성하고 list, ButtonGroupteamPanel받는들을 추가한다.

    • OK 버튼 처리기 list 통한 루프는 선택된 JRadioButton 식별한다.

imagee

import java.awt.EventQueue; 
import java.awt.GridBagLayout; 
import java.awt.GridLayout; 
import java.awt.event.ActionEvent; 
import java.util.ArrayList; 
import java.util.Arrays; 
import java.util.List; 
import javax.swing.AbstractAction; 
import javax.swing.BorderFactory; 
import javax.swing.ButtonGroup; 
import javax.swing.JButton; 
import javax.swing.JFrame; 
import javax.swing.JOptionPane; 
import javax.swing.JPanel; 
import javax.swing.JRadioButton; 
import javax.swing.JScrollPane; 

/** 
* @see https://stackoverflow.com/a/38157536/230513 
*/ 
public class Test { 

    List<String> names = Arrays.asList("Arsenal", "Aston Villa", "Bournemouth", 
     "Chelsea", "Crystal Palace", "Everton", "Leicester City", "Liverpool", 
     "Manchester United", "Manchester City", "Newcastle United", 
     "Norwich City", "Southampton", "Stoke City", "Sunderland", 
     "Swansea City", "Tottenham Hotspur", "Watford", "West Brom", "West Ham"); 

    private void display() { 
     JFrame f = new JFrame("Test"); 
     f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     JPanel mainPanel = new JPanel(new GridLayout(1, 0)); 
     JPanel teamPanel = new JPanel(new GridLayout(0, 1)); 
     List<JRadioButton> list = new ArrayList<>(); 
     ButtonGroup bg = new ButtonGroup(); 
     for (String name : names) { 
      JRadioButton jrb = new JRadioButton(name); 
      list.add(jrb); 
      bg.add(jrb); 
      teamPanel.add(jrb); 
     } 
     teamPanel.setBorder(BorderFactory.createTitledBorder("Please choose a team.")); 
     mainPanel.add(new JScrollPane(teamPanel)); 
     JPanel okPanel = new JPanel(new GridBagLayout()); 
     JButton okButton = new JButton(new AbstractAction("OK") { 
      @Override 
      public void actionPerformed(ActionEvent e) { 
       for (JRadioButton jrb : list) { 
        if (jrb.isSelected()) { 
         JOptionPane.showMessageDialog(f, "You chose " + jrb.getText()); 
        } 
       } 
      } 
     }); 
     okButton.setFont(okButton.getFont().deriveFont(36f)); 
     okPanel.add(okButton); 
     mainPanel.add(okPanel); 
     f.add(mainPanel); 
     f.pack(); 
     f.setSize(400, list.get(0).getHeight() * 16); 
     f.setLocationRelativeTo(null); 
     f.setVisible(true); 
    } 

    public static void main(String[] args) { 
     EventQueue.invokeLater(new Test()::display); 
    } 
} 
2

이 GU가 레이아웃을 조합하여 만들 간단하다 (또한 사용하여 수행 할 수 있지만 하나 또는 GridBagLayoutGroupLayout).

결합 된 레이아웃의 경우 라디오 버튼을 단일 열 그리드 레이아웃에 넣으십시오. 페이지 시작 제약 조건에 레이블이있는 테두리 레이아웃의 가운데에있는 스크롤 창에 해당 패널을 배치합니다. 이 패널을 테두리 레이아웃과 함께 다른 테두리 레이아웃의 줄 시작 위치에 놓습니다. 버튼을 바깥 쪽 테두리 레이아웃의 중앙에있는 그리드 백 배치에 놓습니다. 끝난.구축 할 때 레이아웃 관리자에게 제공

숫자 모든 버튼 & 버튼 내에서 사용 여백 주위뿐만 아니라 빈 테두리 수 있습니다

이 그 전략의 내 구현은 흰색 공간을 넓히거나 줄이기 위해 조정할 수 있습니다.

import java.awt.*; 
import javax.swing.*; 
import javax.swing.border.EmptyBorder; 

public class NewGameGUIUsingLayouts { 

    private JComponent ui = null; 
    public static final String[] TEAM_NAMES = { 
     "Arsenal", "Aston Villa", "Bournemouth", "Chelsea", "Crystal Palace", 
     "Everton", "Leicester City", "Liverpool", "Manchester United", 
     "Manchester City", "Newcastle United", "Norwich City", "Southampton", 
     "Stoke City", "Sunderland", "Swansea City", "Tottenham Hotspur", 
     "Watford", "West Brom", "West Ham" 
    }; 

    NewGameGUIUsingLayouts() { 
     initUI(); 
    } 

    public void initUI() { 
     if (ui != null) { 
      return; 
     } 

     ui = new JPanel(new BorderLayout(4, 4)); 
     ui.setBorder(new EmptyBorder(20, 20, 20, 20)); 

     JPanel teamSelectorPanel = new JPanel(new GridLayout(0, 1, 5, 10)); 
     ButtonGroup teamGroup = new ButtonGroup(); 
     for (String s : TEAM_NAMES) { 
      JRadioButton radioButton = new JRadioButton(s); 
      teamGroup.add(radioButton); 
      teamSelectorPanel.add(radioButton); 
     } 
     JPanel lineStartPanel = new JPanel(new BorderLayout(20, 20)); 
     ui.add(lineStartPanel, BorderLayout.LINE_START); 
     lineStartPanel.add(new JScrollPane(
       teamSelectorPanel, 
       JScrollPane.VERTICAL_SCROLLBAR_ALWAYS, 
       JScrollPane.HORIZONTAL_SCROLLBAR_NEVER), 
       BorderLayout.CENTER); 
     lineStartPanel.add(
       new JLabel("Please choose a team"), BorderLayout.PAGE_START); 
     JButton okButton = new JButton("OK"); 
     okButton.setMargin(new Insets(20, 50, 20, 50)); 
     okButton.setFont(okButton.getFont().deriveFont(50f)); 
     JPanel centerButtonPanel = new JPanel(new GridBagLayout()); 
     centerButtonPanel.setBorder(new EmptyBorder(100,100,100,100)); 
     centerButtonPanel.add(okButton); 
     ui.add(centerButtonPanel, BorderLayout.CENTER); 
    } 

    public JComponent getUI() { 
     return ui; 
    } 

    public static void main(String[] args) { 
     Runnable r = new Runnable() { 
      @Override 
      public void run() { 
       try { 
        UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); 
       } catch (Exception useDefault) { 
       } 
       NewGameGUIUsingLayouts o = new NewGameGUIUsingLayouts(); 

       JFrame f = new JFrame(o.getClass().getSimpleName()); 
       f.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); 
       f.setLocationByPlatform(true); 

       f.setContentPane(o.getUI()); 
       f.pack(); 
       Dimension d = f.getSize(); 
       Dimension shortDimension = new Dimension(
         (int)d.getWidth(), 
         (int)d.getHeight()-200); 
       f.setMinimumSize(shortDimension); 
       f.setSize(shortDimension); 

       f.setVisible(true); 
      } 
     }; 
     SwingUtilities.invokeLater(r); 
    } 
} 
관련 문제