import java.sql.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;
import java.awt.*;
import java.io.BufferedReader;
import java.io.InputStreamReader;
public class Ui2 extends JFrame {
JLabel l, l1;
JFrame f;
JPanel panel;
JScrollPane scrollpane;
int r;
JList list;
Ui2() {
super("HADOOP GUI");
panel = new JPanel();
setContentPane(panel);
panel.setSize(500, 500);
SpringLayout x = new SpringLayout();
panel.setLayout(x);
DefaultListModel listmodel = new DefaultListModel();
for (int i = 1; i <= 10; i++) {
listmodel.addElement("Record" + i);
}
list = new JList(listmodel);
list.setVisibleRowCount(5); // here is problem
list.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
scrollpane = new JScrollPane(list);
x.putConstraint(SpringLayout.WEST, scrollpane, 150, SpringLayout.WEST, panel);
x.putConstraint(SpringLayout.NORTH, scrollpane, 30, SpringLayout.NORTH, panel);
panel.add(scrollpane);
Dimension d = list.getPreferredSize();
d.width = 200;
scrollpane.setPreferredSize(d);
l1 = new JLabel("Default");
x.putConstraint(SpringLayout.WEST, l1, 150, SpringLayout.WEST, panel);
x.putConstraint(SpringLayout.NORTH, l1, 300, SpringLayout.NORTH, panel);
panel.add(l1);
list.addListSelectionListener(new ListSelectionListener() {
@Override
public void valueChanged(ListSelectionEvent arg0) {
}
});
}
}
방법이 보인다
답변
작동하지 setVisibleRowCount.
SpringLayout
을 사용하여 작업을 수행 할 수 없어서 응용 프로그램을 약간 다시 작성합니다 (이전에는 사용하지 않았 음). 그러나 BorderLayout
으로 잘 작동합니다. 은 JList
이 포함되어 있으며 이는 JPanel
으로 레이아웃 관리자를 정의하지 않은 상태로 포장하면됩니다. 그 이유는 LayoutManager가 사용 가능한 공간에 따라 구성 요소를 레이아웃하므로, setVisisbleRowCount
은 무시 될 것이라고 생각합니다. 그러나, 다른 LayoutManager를 사용하면 구성 요소가 다르게 표시 될 수 있습니다. 개인적으로 간단한 배열 (북쪽, 남쪽, ...)에 BorderLayout
을 사용하고 일련의 병렬 구성 요소에 대해서는 FlowLayout
, 고급 구성 요소 인 경우에는 GridbagLayout
을 사용하는 것이 좋습니다. 거의 모든 응용 프로그램에 충분해야합니다.
import java.awt.BorderLayout;
import javax.swing.DefaultListModel;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.ListSelectionModel;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;
public class Ui2 extends JFrame {
/**
*
*/
private static final long serialVersionUID = 2464942276900547953L;
private JLabel l1;
private JPanel panel;
private JScrollPane scrollpane;
private JList<String> list;
public Ui2() {
super("HADOOP GUI");
panel = new JPanel();
panel.setLayout(new BorderLayout());
setContentPane(panel);
panel.setSize(500, 500);
DefaultListModel<String> listmodel = new DefaultListModel<String>();
for (int i = 1; i <= 10; i++) {
listmodel.addElement("Record" + i);
}
list = new JList<String>(listmodel);
list.setVisibleRowCount(5); // here is problem
list.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
scrollpane = new JScrollPane(list);
JPanel p = new JPanel();
p.add(scrollpane);
panel.add(p, BorderLayout.CENTER);
l1 = new JLabel("Default");
panel.add(l1, BorderLayout.SOUTH);
list.addListSelectionListener(new ListSelectionListener() {
@Override
public void valueChanged(ListSelectionEvent arg0) {
}
});
}
}
'LayoutManager를 설정 한 JPanel에 추가 된 JLists에는 setVisibleRowCount (int)를 사용할 수 없습니다. '- 물론 가능합니다. setVisibleRowCount() 메소드가 있으므로 JList에 적합한 크기를 결정할 수 있습니다. SpringLayout은 사용할 복잡한 레이아웃 관리자이며 OP가 제약 조건을 올바르게 설정하지 않았다고 생각합니다. 'JList를 포함하고있는 Scrollbar를 외부 JPanel에 랩핑하면됩니다. 먼저 스크롤 패널을 패널에 추가 할 필요가 없습니다. 예를 들어, BorderLayout의 북쪽에 scrollPane를 추가 할 수 있습니다. – camickr
정확히 작동하지 않는 항목은 무엇입니까? –
list.setVisibleRowCount (5); jlist에 5 개 이상의 값을 추가하면 표시되는 행 수가 늘어납니다. 그 jlist 쇼 5 행을 원하고 jlist 사용자의 다른 값을 보려면 jlist를 스크롤해야합니다. – Himanshu