gpt4 book ai didi

java - 有没有什么方法可以将滚动 Pane 添加到 jlist 中,并将其添加到具有空布局的面板上?

转载 作者:行者123 更新时间:2023-12-01 19:32:37 26 4
gpt4 key购买 nike

我正在做一个基于医疗商店的学校项目,我想向我正在使用的所有 3 个列表添加一个滚动 Pane

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();
}
});
}
}

有什么方法可以向列表、列表2和列表3添加滚动 Pane 吗?我真的不想设置另一种布局类型,因为我不习惯它们,当我开始做这个 GUI 时,我使用的是绝对布局,但我遇到了一些问题,我决定手动编写所有代码。

最佳答案

感谢您提供示例代码/最小工作示例。 (备注 - 如果未找到 Plante.txt,则会引发异常。您可以改进代码来处理此行为,例如,向用户发出警告或消息。)

您可以将 JList 添加到 JScrollPane,如下所示:

// to ensure single selection in your list
someList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
JScrollPane scrollPane = new JScrollPane(someList);

然后,您必须将 scollPane 添加到 LayoutManager 或(在您的示例中)JPanel

关于java - 有没有什么方法可以将滚动 Pane 添加到 jlist 中,并将其添加到具有空布局的面板上?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59247059/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com