늘 레이아웃을 사용하여 JPanel에서 JTable을 추가하려면 어떻게 해야 합니까?
추가하고 싶다JTable
JPanel
레이아웃은 그이 whose whose whose 。null
JPanel
에는 다른 컴포넌트가 포함되어 있습니다.가 더해야 요.JTable
적절한 위치에 있습니다.
내포/조합 레이아웃 예제
Java 튜토리얼에는 레이아웃 관리자 사용에 대한 포괄적인 정보가 있습니다.자세한 내용은 컨테이너 내 구성요소 배치 과정을 참조하십시오.
튜토리얼에서 잘 다루지 않는 레이아웃의 한 측면은 중첩된 레이아웃으로, 한 레이아웃을 다른 레이아웃 안에 넣어 복잡한 효과를 얻을 수 있습니다.
다음 코드는 중첩된 레이아웃을 사용하는 방법을 보여주기 위해 다양한 구성요소를 프레임에 넣습니다.명시적으로 설정된 모든 레이아웃은 해당 레이아웃이 사용되는 패널에 대한 제목 테두리로 표시됩니다.
이 코드의 주목할 점은 다음과 같습니다.
- 런타임에 PLAF(Pluggable Look and Feel)를 변경할 수 있는 콤보박스가 있습니다.
- GUI는 사용자의 필요에 따라 확장할 수 있습니다.
- 분할 창 하단에 있는 영상은 스크롤 창 중앙에 위치합니다.
- 왼쪽 라벨 인스턴스는 버튼을 사용하여 동적으로 추가됩니다.
님버스 PLAF
Nested Layout Example.java
import java.awt.*;
import java.awt.image.BufferedImage;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import javax.swing.*;
import javax.swing.table.DefaultTableModel;
import javax.swing.border.TitledBorder;
/** A short example of a nested layout that can change PLAF at runtime.
The TitledBorder of each JPanel shows the layouts explicitly set.
@author Andrew Thompson
@version 2011-04-12 */
class NestedLayoutExample {
public static void main(String[] args) {
Runnable r = new Runnable() {
public void run() {
final JFrame frame = new JFrame("Nested Layout Example");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
final JPanel gui = new JPanel(new BorderLayout(5,5));
gui.setBorder( new TitledBorder("BorderLayout(5,5)") );
//JToolBar tb = new JToolBar();
JPanel plafComponents = new JPanel(
new FlowLayout(FlowLayout.RIGHT, 3,3));
plafComponents.setBorder(
new TitledBorder("FlowLayout(FlowLayout.RIGHT, 3,3)") );
final UIManager.LookAndFeelInfo[] plafInfos =
UIManager.getInstalledLookAndFeels();
String[] plafNames = new String[plafInfos.length];
for (int ii=0; ii<plafInfos.length; ii++) {
plafNames[ii] = plafInfos[ii].getName();
}
final JComboBox plafChooser = new JComboBox(plafNames);
plafComponents.add(plafChooser);
final JCheckBox pack = new JCheckBox("Pack on PLAF change", true);
plafComponents.add(pack);
plafChooser.addActionListener( new ActionListener(){
public void actionPerformed(ActionEvent ae) {
int index = plafChooser.getSelectedIndex();
try {
UIManager.setLookAndFeel(
plafInfos[index].getClassName() );
SwingUtilities.updateComponentTreeUI(frame);
if (pack.isSelected()) {
frame.pack();
frame.setMinimumSize(frame.getSize());
}
} catch(Exception e) {
e.printStackTrace();
}
}
} );
gui.add(plafComponents, BorderLayout.NORTH);
JPanel dynamicLabels = new JPanel(new BorderLayout(4,4));
dynamicLabels.setBorder(
new TitledBorder("BorderLayout(4,4)") );
gui.add(dynamicLabels, BorderLayout.WEST);
final JPanel labels = new JPanel(new GridLayout(0,2,3,3));
labels.setBorder(
new TitledBorder("GridLayout(0,2,3,3)") );
JButton addNew = new JButton("Add Another Label");
dynamicLabels.add( addNew, BorderLayout.NORTH );
addNew.addActionListener( new ActionListener(){
private int labelCount = 0;
public void actionPerformed(ActionEvent ae) {
labels.add( new JLabel("Label " + ++labelCount) );
frame.validate();
}
} );
dynamicLabels.add( new JScrollPane(labels), BorderLayout.CENTER );
String[] header = {"Name", "Value"};
String[] a = new String[0];
String[] names = System.getProperties().
stringPropertyNames().toArray(a);
String[][] data = new String[names.length][2];
for (int ii=0; ii<names.length; ii++) {
data[ii][0] = names[ii];
data[ii][1] = System.getProperty(names[ii]);
}
DefaultTableModel model = new DefaultTableModel(data, header);
JTable table = new JTable(model);
try {
// 1.6+
table.setAutoCreateRowSorter(true);
} catch(Exception continuewithNoSort) {
}
JScrollPane tableScroll = new JScrollPane(table);
Dimension tablePreferred = tableScroll.getPreferredSize();
tableScroll.setPreferredSize(
new Dimension(tablePreferred.width, tablePreferred.height/3) );
JPanel imagePanel = new JPanel(new GridBagLayout());
imagePanel.setBorder(
new TitledBorder("GridBagLayout()") );
BufferedImage bi = new BufferedImage(
200,200,BufferedImage.TYPE_INT_ARGB);
Graphics2D g = bi.createGraphics();
GradientPaint gp = new GradientPaint(
20f,20f,Color.red, 180f,180f,Color.yellow);
g.setPaint(gp);
g.fillRect(0,0,200,200);
ImageIcon ii = new ImageIcon(bi);
JLabel imageLabel = new JLabel(ii);
imagePanel.add( imageLabel, null );
JSplitPane splitPane = new JSplitPane(
JSplitPane.VERTICAL_SPLIT,
tableScroll,
new JScrollPane(imagePanel));
gui.add( splitPane, BorderLayout.CENTER );
frame.setContentPane(gui);
frame.pack();
frame.setLocationRelativeTo(null);
try {
// 1.6+
frame.setLocationByPlatform(true);
frame.setMinimumSize(frame.getSize());
} catch(Throwable ignoreAndContinue) {
}
frame.setVisible(true);
}
};
SwingUtilities.invokeLater(r);
}
}
기타 스크린샷
Windows PLAF
Mac OS X Aqua PLAF
Ubuntu GTK+ PLAF
null 레이아웃을 사용하지 마십시오.Layout Manager 사용법 배우기:
http://download.oracle.com/javase/tutorial/uiswing/layout/using.html
Layout Manager를 사용하면 창 크기 조정 또는 동적 구성요소 수를 적절하게 처리할 수 있습니다.처음에는 위협적으로 보일지 모르지만, 배울 가치가 있다.
내 기억으로는 늘 레이아웃은 절대 위치를 의미하기 때문에 JTable 왼쪽 상단 모서리 위치의 X 포인트를 세는 것은 매우 어렵습니다.단, 모든 패널컴포넌트를 1개씩 가지고 싶은 경우 FlowLayout() 매니저를 다음과 같이 사용할 수 있습니다.
JPanel panel=new JPanel(new FlowLayout());
panel.add(new aComponent());
panel.add(new bComponent());
panel.add(new JTable());
또는 패널을 채우려면 Grid Layout()을 사용해야 합니다.
int x=2,y=2;
JPanel panel=new JPanel(new GridLayout(y,x));
panel.add(new aComponent());
panel.add(new bComponent());
panel.add(new JTable());
행운을 빌어요
null 레이아웃 관리자를 사용하는 경우 항상 구성요소의 경계를 설정해야 합니다.그게 당신 경우 문제예요.
여기서 모두가 제안하는 대로 하고, 시간이 절약된다고 생각하는 레이아웃 매니저를 사용해 주세요.@jzd의 투고에 있는 튜토리얼을 확인해 주세요.
맛있게 드세요, 보로.
JTable
안에 넣어야 .JScrollPane
실제로 추가되어야 합니다.JPanel
.
그JPanel
에는 레이아웃 매니저가 있을 것입니다.
컴포넌트 사이즈의 정밀도를 신경 쓰지 않는 경우는, Pure를 사용할 수 있습니다.BorderLayout
그리고 그것을 조합하여FlowLayout
그리고.GridLayout
정밀도가 필요한 경우 - jgoodies 사용FormLayout
.
그FormLayout
정말 까다로운 문제지만 조금 놀 수 있어요.WindowBuilder
(Eclipse에 내장되어 있습니다) 및 생성된 코드를 확인합니다.복잡해 보일지 모르지만 그것은 그저 무지일 뿐이다.
행운을 빌어요.
우선 다른 레이아웃 매니저를 진지하게 고려해야 합니다.예를 들어 BorderLayoutManager(new JPanel(new BorderLayout())는 좋은 시작입니다.
또, 다이얼로그를 설계할 때는, 레이아웃을 네스트 할 수 있고, 네스트 할 수 있는 것도 잊지 말아 주세요.예를 들면, 1개의 JPanel은 다른 JPanel(BorderLayout의 GridLayout) 안에 있습니다.주의: 사용자가 프레임 크기를 조정할 때 테이블 등의 정보 개체를 자동으로 확장하고 JPanel 배경의 넓은 영역을 표시하지 않도록 '양호' 대화 상자의 크기를 적절하게 조정해야 합니다.이것은 Null Layout에서는 달성할 수 없는 것입니다.
그러나 이 넓은 세계 어딘가에 Null Layout이 딱 맞는 경우가 있을 것입니다.예를 들어 다음과 같습니다.
import java.awt.Dimension;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.DefaultTableModel;
public class JTableInNullLayout
{
public static void main(String[] argv) throws Exception {
DefaultTableModel model = new DefaultTableModel(
new String[][] { { "a", "123"} , {"b", "456"} },
new String[] { "name", "value" } );
JTable t = new JTable(model);
JPanel panel = new JPanel(null);
JScrollPane scroll = new JScrollPane(t);
scroll.setBounds( 0, 20, 150, 100 ); // x, y, width, height
panel.add(scroll);
JFrame frame = new JFrame();
frame.add(panel);
frame.setPreferredSize( new Dimension(200,200));
frame.pack();
frame.setVisible(true);
}
}
구성요소에 "null" 레이아웃이 있는 경우 사용자가 직접 레이아웃을 관리해야 합니다. 즉, 구성요소의 자녀가 그릴 위치를 결정하기 위한 치수와 위치를 계산해야 합니다.그것이 절대적으로 필요하지 않다면 꽤 지루하다.
이러한 세밀한 제어를 원한다면 UI를 사용하기 전에 GridBagLayout을 먼저 사용해 보십시오.
JPanel panel = new JPanel();
JTable table = new JTable(rowData, colData);
JScrollPane scrollPane = new JScrollPane(table);
panel.add(scrollPane, BorderLayout.CENTER);
panel.setSize(800, 150);
panel.add(table);
panel.setLocationRelativeTo(null);
panel.setVisible(true);
이게 도움이 됐으면 좋겠다.
JFrame frame = new JFrame("Sample Frame");
frame.setSize(600, 600);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JPanel panel = new JPanel();
DefaultTableModel dfm = new DefaultTableModel(data, columnNames);
JTable table = new JTable(dfm);
JScrollPane scrollPane = new JScrollPane(table);
panel.add(scrollPane);
frame.add(panel);
frame.setVisible(true);
테이블 모델은 요구 사항에 따라 달라집니다.
this.setTitle("Sample");
JPanel p = new JPanel(new BorderLayout());
WindowEvent we = new WindowEvent(this, WindowEvent.WINDOW_CLOSED);
this.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent we) {
System.exit(0);
}
});
// Create columns names
String columnNames[] = { "FirstCol", "SecondCol",
"ThirdCol", "FourthCol" };
dataModel = new DefaultTableModel();
for (int col = 0; col < columnNames.length; col++) {
dataModel.addColumn(columnNames[col]);
}
// Create a new table instance
table = new JTable(dataModel);
table.setPreferredScrollableViewportSize(new Dimension(200, 120));
table.setFillsViewportHeight(true);
table.setShowGrid(true);
table.setAutoscrolls(true);
// Add the table to a scrolling pane
scrollPane = new JScrollPane(table,
JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,
JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
scrollPane.setPreferredSize(new Dimension(700, 700));
JPanel jpResultPanel = new JPanel();
jpResultPanel.setBorder(BorderFactory.createTitledBorder(
BorderFactory.createEtchedBorder(), "Result",
TitledBorder.CENTER, TitledBorder.TOP));
jpResultPanel.add(scrollPane);
add(jpResultPanel);
pack();
setSize(720, 720);
setVisible(true);
이거 먹어봐.
다음의 코드를 사용할 수 있습니다.JTable을 JPanel에 추가하려면
JPanel panel = new JPanel();
this.setContentPane(panel);
panel.setLayout(null);
String data[][] = {{"1.", "ABC"}, {"2.", "DEF"}, {"3.", "GHI" }};
String col[] = {"Sr. No", "Name"};
JTable table = new JTable(data,col);
table.setBounds(100, 100, 100, 80);
panel.add(table);
setVisible(true);
setSize(300,300);
언급URL : https://stackoverflow.com/questions/5621338/how-to-add-jtable-in-jpanel-with-null-layout
'IT이야기' 카테고리의 다른 글
최근의 GTK 3.22는 아직 Boehm GC에 우호적인가(스레드 문제)? (0) | 2022.06.25 |
---|---|
Vue 2.3 컴포넌트의 2방향 바인딩 (0) | 2022.06.25 |
vuejs 2 매개 변수가 사용될 때 vuex에서 저장소 값을 감시하는 방법 (0) | 2022.06.25 |
테스트에서 vue 계산 속성을 수동으로 업데이트하는 방법 (0) | 2022.06.25 |
vue js 팝업에서 카운트다운 타이머가 작동하지 않음 (0) | 2022.06.25 |