我正在開發一個簡單的應用程式,它將一些物件(人)存盤在一個陣列中,我試圖用它來在螢屏上JOptionPane.showMessageDialog列出它們( )。obj.toString
問題是在大約六個物件之后,面板變得比螢屏高,并且它沒有側邊欄或某種方式來拖動它來改變它的大小。

有沒有辦法實作這些功能之一,或者將其設定為將物件顯示為網格、列或其他任何可以修復它的東西?
uj5u.com熱心網友回復:
我認為人們要么忘記,要么不知道,您可以將“實時組件”傳遞給類的message引數JOptionPane,這為您提供了無限的可能性,例如......
你可以...
使用JTextArea包裹在 aJScrollPane中,例如...

import java.awt.EventQueue;
import java.text.NumberFormat;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
import java.util.StringJoiner;
import javax.swing.JOptionPane;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
public class Test {
public static void main(String[] args) {
new Test();
}
public Test() {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
List<Person> people = new ArrayList<>(100);
Random rnd = new Random();
for (int index = 0; index < 100; index ) {
Person person = new Person(index, "Person " (index 1), "1234567890", LocalDate.now(), LocalDate.now(), LocalDate.MAX, rnd.nextDouble() * 10.0);
people.add(person);
}
StringJoiner joiner = new StringJoiner("\n----------------------------------------\n\n\n\n", "[\n", "\n]");
for (Person person : people) {
joiner.add(person.toString());
}
JTextArea ta = new JTextArea(20, 30);
ta.setText(joiner.toString());
ta.setCaretPosition(0);
ta.setEditable(false);
JOptionPane.showMessageDialog(null, new JScrollPane(ta));
}
});
}
public class Person {
private int id;
private String name;
private String phoneNumber;
private LocalDate birthDate;
private LocalDate registrationDate;
private LocalDate lastUpdate;
private double finalNote;
public Person(int id, String name, String phoneNumber, LocalDate birthDate, LocalDate registrationDate, LocalDate lastUpdate, double finalNote) {
this.id = id;
this.name = name;
this.phoneNumber = phoneNumber;
this.birthDate = birthDate;
this.registrationDate = registrationDate;
this.lastUpdate = lastUpdate;
this.finalNote = finalNote;
}
@Override
public String toString() {
return new StringJoiner("\n")
.add("Person ID: " getId())
.add("Name: " getName())
.add("Phone number: " getPhoneNumber())
.add("Birth date: " DateTimeFormatter.ISO_LOCAL_DATE.format(getBirthDate()))
.add("Registration date: " DateTimeFormatter.ISO_LOCAL_DATE.format(getRegistrationDate()))
.add("Last date: " DateTimeFormatter.ISO_LOCAL_DATE.format(getLastUpdate()))
.add("Final note: " NumberFormat.getNumberInstance().format(getFinalNote()))
.toString();
}
public int getId() {
return id;
}
public String getName() {
return name;
}
public String getPhoneNumber() {
return phoneNumber;
}
public LocalDate getBirthDate() {
return birthDate;
}
public LocalDate getRegistrationDate() {
return registrationDate;
}
public LocalDate getLastUpdate() {
return lastUpdate;
}
public double getFinalNote() {
return finalNote;
}
}
}
你可以...
使用JList, 例如...

import java.awt.Component;
import java.awt.EventQueue;
import java.text.NumberFormat;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
import java.util.StringJoiner;
import javax.swing.DefaultListCellRenderer;
import javax.swing.DefaultListModel;
import javax.swing.JList;
import javax.swing.JOptionPane;
import javax.swing.JScrollPane;
public class Test {
public static void main(String[] args) {
new Test();
}
public Test() {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
List<Person> people = new ArrayList<>(100);
Random rnd = new Random();
for (int index = 0; index < 100; index ) {
Person person = new Person(index, "Person " (index 1), "1234567890", LocalDate.now(), LocalDate.now(), LocalDate.MAX, rnd.nextDouble() * 10.0);
people.add(person);
}
DefaultListModel<Person> model = new DefaultListModel<>();
model.addAll(people);
JList<Person> list = new JList<>(model);
list.setCellRenderer(new PersonListCellRenderer());
list.setVisibleRowCount(5);
JOptionPane.showMessageDialog(null, new JScrollPane(list));
}
});
}
public class PersonListCellRenderer extends DefaultListCellRenderer {
@Override
public Component getListCellRendererComponent(JList<?> list, Object value, int index, boolean isSelected, boolean cellHasFocus) {
if (value instanceof Person) {
Person person = (Person) value;
StringBuilder sb = new StringBuilder(32);
sb.append("<html><body>")
.append("Person ID: ").append(person.getId()).append("<br>")
.append("Name: ").append(person.getName()).append("<br>")
.append("Phone number: ").append(person.getPhoneNumber()).append("<br>")
.append("Birth date: ").append(DateTimeFormatter.ISO_LOCAL_DATE.format(person.getBirthDate())).append("<br>")
.append("Registration date: ").append(DateTimeFormatter.ISO_LOCAL_DATE.format(person.getRegistrationDate())).append("<br>")
.append("Last update: ").append(DateTimeFormatter.ISO_LOCAL_DATE.format(person.getLastUpdate())).append("<br>")
.append("Final note: ").append(person.getId()).append("<br>")
.append("<hr>")
.append("</body></html>");
value = sb.toString();
}
return super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus); //To change body of generated methods, choose Tools | Templates.
}
}
public class Person {
private int id;
private String name;
private String phoneNumber;
private LocalDate birthDate;
private LocalDate registrationDate;
private LocalDate lastUpdate;
private double finalNote;
public Person(int id, String name, String phoneNumber, LocalDate birthDate, LocalDate registrationDate, LocalDate lastUpdate, double finalNote) {
this.id = id;
this.name = name;
this.phoneNumber = phoneNumber;
this.birthDate = birthDate;
this.registrationDate = registrationDate;
this.lastUpdate = lastUpdate;
this.finalNote = finalNote;
}
@Override
public String toString() {
return new StringJoiner("\n")
.add("Person ID: " getId())
.add("Name: " getName())
.add("Phone number: " getPhoneNumber())
.add("Birth date: " DateTimeFormatter.ISO_LOCAL_DATE.format(getBirthDate()))
.add("Registration date: " DateTimeFormatter.ISO_LOCAL_DATE.format(getRegistrationDate()))
.add("Last date: " DateTimeFormatter.ISO_LOCAL_DATE.format(getLastUpdate()))
.add("Final note: " NumberFormat.getNumberInstance().format(getFinalNote()))
.toString();
}
public int getId() {
return id;
}
public String getName() {
return name;
}
public String getPhoneNumber() {
return phoneNumber;
}
public LocalDate getBirthDate() {
return birthDate;
}
public LocalDate getRegistrationDate() {
return registrationDate;
}
public LocalDate getLastUpdate() {
return lastUpdate;
}
public double getFinalNote() {
return finalNote;
}
}
}
你可以...
使用JTable, 例如...

import java.awt.EventQueue;
import java.text.NumberFormat;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
import java.util.StringJoiner;
import javax.swing.JOptionPane;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.AbstractTableModel;
import javax.swing.table.TableModel;
public class Test {
public static void main(String[] args) {
new Test();
}
public Test() {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
List<Person> people = new ArrayList<>(100);
Random rnd = new Random();
for (int index = 0; index < 100; index ) {
Person person = new Person(index, "Person " (index 1), "1234567890", LocalDate.now(), LocalDate.now(), LocalDate.MAX, rnd.nextDouble() * 10.0);
people.add(person);
}
TableModel model = new PersonTableModel(people);
JTable table = new JTable(model);
table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
JOptionPane.showMessageDialog(null, new JScrollPane(table));
}
});
}
public class PersonTableModel extends AbstractTableModel {
private List<Person> people;
private String[] columnNames = new String[]{"ID", "Name", "Phone number", "Date of birth", "Date of registration", "Last updated", "Final note"};
public PersonTableModel(List<Person> people) {
this.people = people;
}
@Override
public int getRowCount() {
return people.size();
}
@Override
public int getColumnCount() {
return columnNames.length;
}
@Override
public String getColumnName(int column) {
return columnNames[column];
}
@Override
public Class<?> getColumnClass(int columnIndex) {
switch (columnIndex) {
case 0:
return Integer.class;
case 1:
case 2:
return String.class;
case 3:
case 4:
case 5:
return LocalDate.class;
case 6:
return Double.class;
}
return String.class;
}
@Override
public Object getValueAt(int rowIndex, int columnIndex) {
Person person = people.get(rowIndex);
switch (columnIndex) {
case 0:
return person.getId();
case 1:
return person.getName();
case 2:
return person.getPhoneNumber();
case 3:
return person.getBirthDate();
case 4:
return person.getRegistrationDate();
case 5:
return person.getLastUpdate();
case 6:
return person.getFinalNote();
}
return null;
}
}
public class Person {
private int id;
private String name;
private String phoneNumber;
private LocalDate birthDate;
private LocalDate registrationDate;
private LocalDate lastUpdate;
private double finalNote;
public Person(int id, String name, String phoneNumber, LocalDate birthDate, LocalDate registrationDate, LocalDate lastUpdate, double finalNote) {
this.id = id;
this.name = name;
this.phoneNumber = phoneNumber;
this.birthDate = birthDate;
this.registrationDate = registrationDate;
this.lastUpdate = lastUpdate;
this.finalNote = finalNote;
}
@Override
public String toString() {
return new StringJoiner("\n")
.add("Person ID: " getId())
.add("Name: " getName())
.add("Phone number: " getPhoneNumber())
.add("Birth date: " DateTimeFormatter.ISO_LOCAL_DATE.format(getBirthDate()))
.add("Registration date: " DateTimeFormatter.ISO_LOCAL_DATE.format(getRegistrationDate()))
.add("Last date: " DateTimeFormatter.ISO_LOCAL_DATE.format(getLastUpdate()))
.add("Final note: " NumberFormat.getNumberInstance().format(getFinalNote()))
.toString();
}
public int getId() {
return id;
}
public String getName() {
return name;
}
public String getPhoneNumber() {
return phoneNumber;
}
public LocalDate getBirthDate() {
return birthDate;
}
public LocalDate getRegistrationDate() {
return registrationDate;
}
public LocalDate getLastUpdate() {
return lastUpdate;
}
public double getFinalNote() {
return finalNote;
}
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/416536.html
標籤:
