ورود

View Full Version : سوال: نمایش مقادیر روی برچسب داخل حلقه



ravand
سه شنبه 05 خرداد 1394, 09:59 صبح
سلام
من در php راحت می امدم. و مقادیرم رو داخل حلقه و روی برچسب نمایش میدادم. و پشت سر هم مقادیر نمایش داده میشد. ولی الان در جاوا نمیشه این کار رو کرد. مثلا من میخوام مقادیرم رو از دیتابیس بگیرم. یا از rss feeds یه سایت بگیرم. و داخل حلقه پشت سر هم و روی برچسب ها نمایش بدم. الان چون در جاوا باید برای هر برچسب یه شماره قرار بدیم این کار رو نمیشه کرد. مثلا برچسب یک برچسب دو. هر چی هست اسم برچسب ها باید با هم فرق داشته باشه تا درست کار کنه.
در ضمن برای جدول بندی من از SpringLayout استفاده کردم.
پیشنهاد شما چیه؟ باید چیکار کرد؟
متشکرم.

ahmad.mo74
سه شنبه 05 خرداد 1394, 12:43 عصر
سلام. اگر یه نمونه کد هم میذاشتین بهتر بود.

ravand
سه شنبه 05 خرداد 1394, 17:21 عصر
بذار یه مثال ساده برات بزنم.
شما به یک دیتابیس وصل میشی. بعد میخوای مقادیر دیتابیس را روی برچسب داخل حلقه پشت سر هم نمایش بدی. چطوری می نویسی؟
این مثال رو من نوشتم:
package ahang;import java.sql.*;
import java.util.Timer;
import java.util.TimerTask;
import java.util.Calendar;
import javax.swing.JOptionPane;


import java.awt.*;
import java.awt.Container;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JTextField;
import javax.swing.SpringLayout;
public class database {
static String MSG ;
public static void main(String[] args) throws SQLException {
JFrame frame = new JFrame("فرم");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOS E);
Container contentPane = frame.getContentPane();
SpringLayout layout = new SpringLayout();
contentPane.setLayout(layout);

String dbURL="jdbc:h2:~/test";
String query="SELECT * from timer";
Statement stmt = null;
ResultSet rs = null;
String userName = "sa";
String userPwd = "";
Connection con;
try { Class.forName("org.h2.Driver");
con = DriverManager.getConnection(dbURL, userName, userPwd);
System.out.println("Connection Successful!");
stmt = con.createStatement();
rs=stmt.executeQuery(query);
}
catch(Exception e) {
e.printStackTrace();
} while(rs.next()){
//System.out.println()
String msg = rs.getString("MSG");
JLabel le = new JLabel(msg);
contentPane.add(le);
layout.putConstraint(SpringLayout.WEST, le, 10,SpringLayout.WEST, contentPane);
layout.putConstraint(SpringLayout.NORTH, le, 25,SpringLayout.NORTH, contentPane);
}
frame.setSize(300, 300);
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
}
الان همه ی برچسب ها رو روی هم قرار میده. و زیر هم قرار نمیده.

ahmad.mo74
سه شنبه 05 خرداد 1394, 19:15 عصر
درسته، برای اینکه شما هر دفعه همه label هارو به فاصله 25 از NORTH قرار میدی.

مثال :


import javax.swing.*;
import java.awt.*;
import java.sql.*;


public class TestFrame extends JFrame {


private static final String DRIVER_CLASS_NAME = "org.h2.Driver";
private static final String DB_URL = "jdbc:h2:mem:test";
private static final String DB_USERNAME = "sa";
private static final String DB_PASSWORD = "";


public static void main(String[] args) {
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAn dFeelClassName());
} catch (ClassNotFoundException | InstantiationException | UnsupportedLookAndFeelException | IllegalAccessException e) {
e.printStackTrace();
}
EventQueue.invokeLater(() -> new TestFrame().setVisible(true));
}


public TestFrame() {
initComponents();
}


private void initComponents() {
setTitle("فرم");
setDefaultCloseOperation(WindowConstants.EXIT_ON_C LOSE);
SpringLayout springLayout = new SpringLayout();
Container contentPane = getContentPane();
contentPane.setLayout(springLayout);
setPreferredSize(new Dimension(400, 400));
setLocationRelativeTo(null);
try (Connection connection = getConnection(DRIVER_CLASS_NAME, DB_URL, DB_USERNAME, DB_PASSWORD)) {
if (connection != null) {
try (Statement statement = connection.createStatement()) {
ResultSet resultSet = statement.executeQuery("SELECT * FROM `LABELS`");
for (int i = 1; resultSet.next(); i++) {
JLabel label = new JLabel(resultSet.getString("NAME") + " : ");
JTextField field = new JTextField(resultSet.getString("VALUE"), 20);
contentPane.add(label);
contentPane.add(field);
springLayout.putConstraint(SpringLayout.WEST, label, 15, SpringLayout.WEST, contentPane);
springLayout.putConstraint(SpringLayout.NORTH, label, 25 * i, SpringLayout.NORTH, contentPane);
springLayout.putConstraint(SpringLayout.WEST, field, 65, SpringLayout.WEST, contentPane);
springLayout.putConstraint(SpringLayout.NORTH, field, 25 * i, SpringLayout.NORTH, contentPane);
}
}
}
} catch (SQLException e) {
e.printStackTrace();
}
pack();
}


private static Connection getConnection(String driverClassName, String dbUrl, String username, String password) {
try {
Class.forName(driverClassName);
return DriverManager.getConnection(dbUrl, username, password);
} catch (ClassNotFoundException | SQLException e) {
e.printStackTrace();
}
return null;
}


}

ravand
دوشنبه 11 خرداد 1394, 12:04 عصر
هر چی سعی کردم کاری کنم وقتی تعداد برچسب ها زیاد میشه و توی صفحه جاش نمیشه. یه اسکرول بگیره. که راحت بشه با حرکت دکمه ی وسط ماوس بقیه ی برچسب ها که رفته پایین رو هم دید. ولی نمیدونم چطوری این کار رو داخل حلقه بکنم؟
متشکرم.

ahmad.mo74
دوشنبه 11 خرداد 1394, 13:14 عصر
برای اینکار باید label هارو داخل یه JPanel قرار بدید و بعد اون panel رو داخل JScrollPane.

import javax.swing.*;import java.awt.*;


public class TestFrame extends JFrame {


public static void main(String[] args) {
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAn dFeelClassName());
} catch (ClassNotFoundException | InstantiationException | UnsupportedLookAndFeelException | IllegalAccessException e) {
e.printStackTrace();
}
EventQueue.invokeLater(() -> new TestFrame().setVisible(true));
}


public TestFrame() {
initComponents();
}


private void initComponents() {
setTitle("فرم");
setDefaultCloseOperation(WindowConstants.EXIT_ON_C LOSE);
setPreferredSize(new Dimension(400, 400));
setLocationRelativeTo(null);
JPanel panel = new JPanel();
panel.setLayout(new GridBagLayout());
GridBagConstraints c = new GridBagConstraints();
c.insets = new Insets(10, 15, 10, 15);
char ch = 'a';
for (int i = 1; i <= 26; i++) {
JLabel label = new JLabel(ch++ + " : ");
JTextField field = new JTextField(String.valueOf(i), 20);
c.gridy = i;
c.gridx = 0;
panel.add(label, c);
c.gridx = 1;
panel.add(field, c);
}
add(new JScrollPane(panel));
pack();
}


}

http://stackoverflow.com/questions/10346449/scrolling-a-jpanel
http://stackoverflow.com/questions/7619931/netbeans-how-to-add-scrollbar-to-jpanel