Java 是否有任何方法可以将滚动窗格添加到jlist,并将其添加到具有空布局的面板上?
我正在做一个基于医学商店的学校项目,我想在我使用的所有3个列表中添加一个滚动窗格Java 是否有任何方法可以将滚动窗格添加到jlist,并将其添加到具有空布局的面板上?,java,swing,Java,Swing,我正在做一个基于医学商店的学校项目,我想在我使用的所有3个列表中添加一个滚动窗格 package Interfata; import java.awt.Color; import java.awt.GridBagLayout; import java.awt.event.ActionListener; import java.awt.event.FocusEvent; import java.awt.event.FocusListener; import java.io.BufferedRea
package Interfata;
import java.awt.Color;
import java.awt.GridBagLayout;
import java.awt.event.ActionListener;
import java.awt.event.FocusEvent;
import java.awt.event.FocusListener;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing. * ;
import javax.swing.DefaultListModel;
import javax.swing.JFrame;
import javax.swing.JList;
import javax.swing.SwingUtilities;
public class Home extends JFrame {
JPanel panelHome;
static String[] listaplante = new String[10];
static String[] listacantitati = new String[10];
static String[] listapreturi = new String[10];
static int kPlante = 0,
kCantitati = 0,
kPreturi = 0;
JButton butonCumpara,
butonAdauga;
JTextField denumireField,
pretField,
cantitateField,
cantitateDoritaField;
public JPanel createHomeContentPane() {
//Creez un panel pe care sa pun toate campurile.
panelHome = new JPanel();
panelHome.setLayout(null);
panelHome.setBackground(new java.awt.Color(204, 204, 255));
panelHome.setBorder(javax.swing.BorderFactory.createTitledBorder("Home"));
//Creez lista cu plante
DefaultListModel < String > listaPlante = new DefaultListModel < >();
JList < String > list = new JList < >(citirePlante());
list.setBounds(50, 75, 75, 100);
list.setSelectionBackground(Color.ORANGE);
panelHome.add(list);
//Creez lista cu cantitatile fiecarei plante
DefaultListModel < String > listaCantitati = new DefaultListModel < >();
JList < String > list2 = new JList < >(citireCantitati());
list2.setBounds(150, 75, 75, 100);
list2.setSelectionBackground(Color.YELLOW);
panelHome.add(list2);
//Creez lista cu preturile fiecarei plante
DefaultListModel < String > listaPreturi = new DefaultListModel < >();
JList < String > list3 = new JList < >(citirePreturi());
list3.setBounds(250, 75, 75, 100);
list3.setSelectionBackground(Color.GREEN);
panelHome.add(list3);
//Creez titlurile pt fiecare lista
JLabel denumireLabel = new JLabel("Denumire:");
denumireLabel.setBounds(50, 55, 70, 20);
panelHome.add(denumireLabel);
JLabel cantitatiLabel = new JLabel("Cantitati:");
cantitatiLabel.setBounds(150, 55, 70, 20);
panelHome.add(cantitatiLabel);
JLabel preturiLabel = new JLabel("Preturi:");
preturiLabel.setBounds(250, 55, 70, 20);
panelHome.add(preturiLabel);
//Creez un camp pt a adauga cantitatea dorita care urmeaza a fi cumparata
//cantitateDoritaField
cantitateDoritaField = new JTextField();
cantitateDoritaField.setBounds(80, 200, 100, 20);
cantitateDoritaField.setHorizontalAlignment(JTextField.CENTER);
//placeholder pt cantitateField
final String placeholderCantitateDorita = "Cantitatea dorita";
cantitateDoritaField.setText(placeholderCantitateDorita);
cantitateDoritaField.addFocusListener(new FocusListener() {
private boolean showingPlaceholder = true;
public void focusGained(FocusEvent e) {
if (showingPlaceholder) {
showingPlaceholder = false;
cantitateDoritaField.setText("");
}
}
public void focusLost(FocusEvent arg0) {
if (cantitateDoritaField.getText().isEmpty()) {
cantitateDoritaField.setText(placeholderCantitateDorita);
showingPlaceholder = true;
}
}
});
panelHome.add(cantitateDoritaField);
//Butonul de cumparare
butonCumpara = new JButton("Cumpara");
butonCumpara.setLocation(180, 200);
butonCumpara.setSize(100, 20);
butonCumpara.addActionListener(new ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
String plantaselectata = list.getSelectedValue();
int indexplanta = list.getSelectedIndex();
String cantitateselectata = list2.getSelectedValue();
int indexcantitate = list2.getSelectedIndex();
String pretselectat = list3.getSelectedValue();
int indexpret = list3.getSelectedIndex();
String cantitatedorita = cantitateDoritaField.getText();
int valCantitate = Integer.valueOf(cantitateselectata);
int valCantitateDorita = Integer.valueOf(cantitatedorita);
int valPret = Integer.valueOf(pretselectat);
if (indexplanta == indexcantitate && indexplanta == indexpret) {
if (valCantitateDorita <= valCantitate) {
try {
afisPlantaCumparata(plantaselectata, valCantitateDorita);
} catch(IOException ex) {
Logger.getLogger(Home.class.getName()).log(Level.SEVERE, null, ex);
}
int a = valCantitate - valCantitateDorita;
String b = Integer.toString(a);
listacantitati[indexcantitate] = b;
panelHome.setVisible(false);
panelHome.setVisible(true);
}
else {
JFrame rootPane = null;
JOptionPane.showMessageDialog(rootPane, "Cantitatea nu esti disponibila", "Eroare de cumparare", JOptionPane.WARNING_MESSAGE);
}
}
else {
JFrame rootPane = null;
JOptionPane.showMessageDialog(rootPane, "Planta, cantitate si pretul nu sunt din aceeasi categorie", "Eroare de cumparare", JOptionPane.WARNING_MESSAGE);
}
}
});
panelHome.add(butonCumpara);
//Cumpurile denumire cantitate si pret pt adaugarea plantei
//denumireField
denumireField = new JTextField();
denumireField.setBounds(80, 240, 100, 20);
denumireField.setHorizontalAlignment(JTextField.CENTER);
//placeholder pt denumireField
final String placeholderDenumire = "Denumire";
denumireField.setText(placeholderDenumire);
denumireField.addFocusListener(new FocusListener() {
private boolean showingPlaceholder = true;
public void focusGained(FocusEvent e) {
if (showingPlaceholder) {
showingPlaceholder = false;
denumireField.setText("");
}
}
public void focusLost(FocusEvent arg0) {
if (denumireField.getText().isEmpty()) {
denumireField.setText(placeholderDenumire);
showingPlaceholder = true;
}
}
});
panelHome.add(denumireField);
//cantitateField
cantitateField = new JTextField();
cantitateField.setBounds(80, 260, 100, 20);
cantitateField.setHorizontalAlignment(JTextField.CENTER);
//placeholder pt cantitateField
final String placeholderCantitate = "Cantitatea";
cantitateField.setText(placeholderCantitate);
cantitateField.addFocusListener(new FocusListener() {
private boolean showingPlaceholder = true;
public void focusGained(FocusEvent e) {
if (showingPlaceholder) {
showingPlaceholder = false;
cantitateField.setText("");
}
}
public void focusLost(FocusEvent arg0) {
if (cantitateField.getText().isEmpty()) {
cantitateField.setText(placeholderCantitate);
showingPlaceholder = true;
}
}
});
panelHome.add(cantitateField);
//pretField
pretField = new JTextField();
pretField.setBounds(80, 280, 100, 20);
pretField.setHorizontalAlignment(JTextField.CENTER);
//placeholder pt pretField
final String placeholderPret = "Pret";
pretField.setText(placeholderPret);
pretField.addFocusListener(new FocusListener() {
private boolean showingPlaceholder = true;
public void focusGained(FocusEvent e) {
if (showingPlaceholder) {
showingPlaceholder = false;
pretField.setText("");
}
}
public void focusLost(FocusEvent arg0) {
if (pretField.getText().isEmpty()) {
pretField.setText(placeholderPret);
showingPlaceholder = true;
}
}
});
panelHome.add(pretField);
//Butonul de adaugare a unei plantei noi
butonAdauga = new JButton("Adauga");
butonAdauga.setLocation(180, 260);
butonAdauga.setSize(100, 20);
butonAdauga.addActionListener(new ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
String denumireNou = denumireField.getText();
String cantitateNou = cantitateField.getText();
String pretNou = pretField.getText();
listaplante[kPlante++] = denumireNou;
listacantitati[kCantitati++] = cantitateNou;
listapreturi[kPreturi++] = pretNou;
panelHome.setVisible(false);
panelHome.setVisible(true);
}
});
panelHome.add(butonAdauga);
//Returnez panelul
panelHome.setOpaque(true);
return panelHome;
}
public static String[] citirePlante() {
BufferedReader objReader = null;
try {
String strCurrentLine;
objReader = new BufferedReader(new FileReader("Plante.txt"));
while ((strCurrentLine = objReader.readLine()) != null) {
listaplante[kPlante] = strCurrentLine;
kPlante++;
}
} catch(IOException e) {
e.printStackTrace();
} finally {
try {
if (objReader != null) objReader.close();
} catch(IOException ex) {
ex.printStackTrace();
}
}
return listaplante;
}
public static String[] citireCantitati() {
BufferedReader objReader = null;
try {
String strCurrentLine;
objReader = new BufferedReader(new FileReader("Cantitati.txt"));
while ((strCurrentLine = objReader.readLine()) != null) {
listacantitati[kCantitati] = strCurrentLine;
kCantitati++;
}
} catch(IOException e) {
e.printStackTrace();
} finally {
try {
if (objReader != null) objReader.close();
} catch(IOException ex) {
ex.printStackTrace();
}
}
return listacantitati;
}
public static String[] citirePreturi() {
BufferedReader objReader = null;
try {
String strCurrentLine;
objReader = new BufferedReader(new FileReader("Preturi.txt"));
while ((strCurrentLine = objReader.readLine()) != null) {
listapreturi[kPreturi] = strCurrentLine;
kPreturi++;
}
} catch(IOException e) {
e.printStackTrace();
} finally {
try {
if (objReader != null) objReader.close();
} catch(IOException ex) {
ex.printStackTrace();
}
}
return listapreturi;
}
public static void afisPlantaCumparata(String p, int c) throws IOException {
FileWriter writer = new FileWriter("PlanteVandute.txt", true);
try (
BufferedWriter bw = new BufferedWriter(writer)) {
bw.write(p + " " + c + "\n");
} catch(IOException e) {
System.err.format("IOException: %s%n", e);
}
}
private static void Home() {
JFrame frameHome = new JFrame("PLAFAR * Calinescu George-Catalin * 221");
//Creez panelul peste frame si il stilizez
Home home = new Home();
frameHome.setContentPane(home.createHomeContentPane());
frameHome.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frameHome.setSize(400, 350);
frameHome.setVisible(true);
}
public static void main(String[] args) {
//Creez GUI si il afisez pe ecran
SwingUtilities.invokeLater(new Runnable() {
public void run() {
Home();
}
});
}
}
package-interdata;
导入java.awt.Color;
导入java.awt.GridBagLayout;
导入java.awt.event.ActionListener;
导入java.awt.event.FocusEvent;
导入java.awt.event.FocusListener;
导入java.io.BufferedReader;
导入java.io.BufferedWriter;
导入java.io.FileReader;
导入java.io.FileWriter;
导入java.io.IOException;
导入java.util.logging.Level;
导入java.util.logging.Logger;
导入javax.swing.*;
导入javax.swing.DefaultListModel;
导入javax.swing.JFrame;
导入javax.swing.JList;
导入javax.swing.SwingUtilities;
公共类家庭扩展JFrame{
JPanel panelHome;
静态字符串[]ListaPlane=新字符串[10];
静态字符串[]ListaAntitati=新字符串[10];
静态字符串[]listapreturi=新字符串[10];
静态int kPlante=0,
KCantati=0,
kPreturi=0;
朱布顿·布顿坎帕拉,
布托纳道加;
JTextField denumireField,
普雷特菲尔德,
坎蒂特菲尔德,
坎蒂塔菲尔德;
公共JPanel createHomeContentPane(){
//Creez un panel pe care sa pun toate露营酒店。
panelHome=新的JPanel();
panelHome.setLayout(null);
setBackground(新的java.awt.Color(204204255));
setboorder(javax.swing.BorderFactory.createTitledBorder(“Home”));
//克里兹利斯塔工厂
DefaultListModelListaPlane=新的DefaultListModel<>();
JListlist=newjlist<>(citirePlante());
列表.立根(50,75,75,100);
list.setSelectionBackground(橙色);
panelHome.add(列表);
//克里兹·利斯塔cu Cantitile fiecarei植物园
DefaultListModelListaAntitati=新的DefaultListModel<>();
JListlist2=新JList<>(citirecantati());
清单2.立根(150,75,75,100);
列表2.setSelectionBackground(颜色:黄色);
panelHome.add(列表2);
//克里兹·利斯塔·普雷图里勒·菲卡雷普兰特酒店
DefaultListModellistaPreturi=新的DefaultListModel<>();
JListlist3=新JList<>(citirePreturi());
清单3.挫折(250、75、75、100);
列表3.setSelectionBackground(颜色为绿色);
panelHome.add(列表3);
//克里兹提尔里尔pt菲卡雷利斯塔酒店
JLabel denumireLabel=新JLabel(“Denumire:”);
denumireLabel.挫折(50,55,70,20);
panelHome.add(denumireLabel);
JLabel-CantititLabel=新的JLabel(“Cantitit:”);
弯曲度.立根(150,55,70,20);
panelHome.add(标签);
JLabel preturiLabel=新的JLabel(“Preturi:”);
前庭标签.立根(250,55,70,20);
panelHome.add(preturiLabel);
//Creez联合国难民营是一个康蒂塔康蒂塔多丽塔护理中心
//坎蒂塔菲尔德酒店
cantitateDoritaField=新的JTextField();
坎蒂塔德多里塔菲尔德.立根(8020010020);
设置水平对齐(JTextField.CENTER);
//占位符pt cantitateField
最后一个字符串占位符cantitatedorita=“Cantitatea dorita”;
setText(占位符cantitatedorita);
addFocusListener(新FocusListener()){
私有布尔值showingPlaceholder=true;
获得公共无效焦点(焦点事件e){
如果(显示占位符){
showingPlaceholder=false;
cantitateDoritaField.setText(“”);
}
}
public void focusLost(FocusEvent arg0){
if(cantitateDoritaField.getText().isEmpty()){
setText(占位符cantitatedorita);
showingPlaceholder=true;
}
}
});
panelHome.add(cantitateDoritaField);
//康帕拉雷丁醇
butonCumpara=新的JButton(“Cumpara”);
butonCumpara.设置位置(180200);
butonCumpara.setSize(100,20);
butonCumpara.addActionListener(新ActionListener(){
public void actionPerformed(java.awt.event.ActionEvent evt){
字符串plantaselectata=list.getSelectedValue();
int indexplanta=list.getSelectedIndex();
字符串cantitateselectata=list2.getSelectedValue();
int indexcantate=list2.getSelectedIndex();
字符串pretselectat=list3.getSelectedValue();
int indexpret=list3.getSelectedIndex();
字符串cantitatedorita=cantitateDoritaField.getText();
int valCantitate=整数.valueOf(cantitateselectata);
int valCantitateDorita=Integer.valueOf(cantitatedorita);
int valPret=Integer.valueOf(pretselectat);
if(indexplanta==indexcantate&&indexplanta==indexpret){
if(valCantitateDorita感谢您提供示例代码/最小工作示例。(一句话-如果未发现Plante.txt
,将引发异常。您可以改进代码以处理此行为,例如,向用户发出警告或消息。)
您可以将JList
添加到JScrollPane
中,如下所示:
// to ensure single selection in your list
someList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
JScrollPane scrollPane = new JScrollPane(someList);
然后,您必须将scollPane
添加到LayoutManager
或(在您的示例中)JPanel
强烈建议使用普通布局管理器,因为布局管理器允许在调整窗口/面板大小时处理组件大小。它还为不同的和操作系统提供更好的支持
要使代码正常工作,您需要在列表周围安装滚动窗格
DefaultListModel<String> listaPlante = new DefaultListModel<>();
JList<String> list = new JList<>(citirePlante());
JScrollPane scroller = new JScrollPane(list);
scroller.setBounds(50,75, 75,100); // not list!!!
list.setSelectionBackground(Color.ORANGE);
panelHome.add(scroller); // not list!!!
DefaultListModel listaplant=newdefaultlistmodel();
JList列表=新的JList(c