메뉴 표시 줄을 클릭 할 때 표를 표시하는 방법은 무엇입니까?
메뉴 표시 줄을 클릭 할 때 표를 표시하는 방법을 알 수 있습니까?
아래는 내 코드입니다.
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.SwingUtilities;
public class Exercise03 extends JFrame {
public Exercise03() {
String[] columns = {
"No", "DO NUMBERS", "INVOICE NUMBERS", "OUTLET", "SUBMITTED BY", "CHECKED BY"
};
Object [][] input = new Object[][] {
{"1", "NKK/DO200100001", "NKK/IV200100001", "K", "A", "B"}
};
JMenuBar menuBar;
JMenu menu;
JMenuItem menuItem1;
menuBar = new JMenuBar();
menu = new JMenu ("Menu");
menu.setMnemonic(KeyEvent.VK_A);
menuBar.add(menu);
menuItem1 = new JMenuItem("Invoice", KeyEvent.VK_I);
menu.add(menuItem1);
menuItem1.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent evt) {
JTable menuItem1 = new JTable(input, columns);
JScrollPane pane = new JScrollPane(menuItem1);
pane.add(menuItem1);
pane.setVisible(true);
}
});
setJMenuBar(menuBar);
Container cp = getContentPane();
cp.setLayout(new FlowLayout());
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setTitle("Documentation Checklist");
setSize(300,100);
setVisible(true);
}
public static void main (String[]args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
new Exercise03();
}
});
}
}
지금은 "메뉴"바를 표시 할 수 있고 클릭하면 "인보이스"라는 하위 메뉴가 하나 표시되지만 "인보이스"하위 메뉴를 클릭하면 메뉴 바 아래에 표가 표시되지 않습니다.
내 예상 결과는 "송장"하위 메뉴를 클릭하면 메뉴 모음 아래에 표가 표시됩니다.
그렇다면 이러한 결과를 표시하도록 코딩하는 방법을 알 수 있습니까?
답변
우선 JScrollPane을 사용하는 방법을 배워야합니다.
JScrollPane pane = new JScrollPane(menuItem1);
//pane.add(menuItem1);
첫 번째 문장 만 필요합니다. 스크롤 창에는 구성 요소를 표시하는 "뷰포트"가 있습니다. 따라서 테이블을 뷰포트에 추가해야합니다. 이는 생성자에서 테이블을 매개 변수로 사용하여 스크롤 창을 만들 때 자동으로 수행됩니다.
스크롤 창 작동 방식에 대한 자세한 내용은 스크롤 창 사용 방법 에 대한 스윙 자습서의 섹션을 읽어보십시오 .
그런 다음 스크롤 창을 프레임에 동적으로 추가하려면 :
레이아웃을 FlowLayout으로 변경하지 마십시오. 기본값
BorderLayout
은 프레임에 대한 더 나은 레이아웃 관리자입니다. 프레임 크기가 조정될 때 구성 요소의 크기를 동적으로 조정할 수 있습니다.JScrollPane을 만들지 만 프레임에 추가하지 않습니다. 따라서 프레임에 스크롤 창을 추가해야합니다. 모든 Swing 구성 요소가 기본적으로 표시되므로 setVisible () 문이 필요하지 않습니다.
프레임에 스크롤 창을 추가 한 후에는 스크롤 창을
revalidate()
추가 한 패널 에서 호출해야 합니다. 이 경우 콘텐츠 창에 추가하기 때문에revalidate()
프레임에서 호출 할 수 있습니다 . 는revalidate()
스크롤 창에게 크기와 위치를 제공하는 레이아웃 매니저를 호출합니다.
다른 해결책은 클래스의 생성자에 JScrollPane을 만들고 프레임에 추가하는 것입니다. 그런 다음 스크롤 창을 클래스의 인스턴스 변수로 저장해야합니다. 그런 다음 메뉴 항목을 클릭하면 JTable을 만들고 다음을 사용하여 스크롤 창에 테이블을 추가 할 수 있습니다.
scrollPane.setViewportView( menuItem1 );
그러면 revalidate ()에 대해 걱정할 필요가 없습니다.